package com.zzyl.nursing.service;

import java.util.List;
import com.zzyl.nursing.domain.CheckOut;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zzyl.nursing.dto.CheckOutApplyDto;
import com.zzyl.nursing.vo.CheckOutDetailVo;

/**
 * 退住办理Service接口
 * 
 * @Author: Zhy
 * @Date: 2025-07-13
 */
public interface ICheckOutService extends IService<CheckOut>
{
    /**
     * 查询退住办理
     * 
     * @param id 退住办理主键
     * @return 退住办理
     */
    public CheckOut selectCheckOutById(Long id);

    /**
     * 查询退住办理列表
     * 
     * @param checkOut 退住办理
     * @return 退住办理集合
     */
    public List<CheckOut> selectCheckOutList(CheckOut checkOut);

    /**
     * 新增退住办理
     * 
     * @param checkOut 退住办理
     * @return 结果
     */
    public int insertCheckOut(CheckOut checkOut);

    /**
     * 修改退住办理
     * 
     * @param checkOut 退住办理
     * @return 结果
     */
    public int updateCheckOut(CheckOut checkOut);

    /**
     * 批量删除退住办理
     * 
     * @param ids 需要删除的退住办理主键集合
     * @return 结果
     */
    public int deleteCheckOutByIds(Long[] ids);

    /**
     * 删除退住办理信息
     * 
     * @param id 退住办理主键
     * @return 结果
     */
    public int deleteCheckOutById(Long id);

    /**
     * 申请退住
     * 
     * @param checkOutApplyDto 退住申请DTO
     */
    void apply(CheckOutApplyDto checkOutApplyDto);

    /**
     * 退住详情
     * 
     * @param id 退住记录ID
     * @return 退住详情
     */
    CheckOutDetailVo getCheckOutInfo(Long id);

    /**
     * 审批退住申请
     * 
     * @param id 退住记录ID
     * @param status 审批状态(1=已批准,3=已拒绝)
     * @param approvalRemark 审批备注
     */
    void approve(Long id, Integer status, String approvalRemark);

    /**
     * 完成退住
     * 
     * @param id 退住记录ID
     */
    void completeCheckOut(Long id);

    /**
     * 撤销退住申请
     * 
     * @param id 退住记录ID
     */
    void revokeCheckOut(Long id);

    /**
     * 级联删除退住和入住数据
     * 
     * @param checkOutId 退住记录ID
     * @param checkInId 入住记录ID
     */
    void deleteCheckOutAndCheckIn(Long checkOutId, Long checkInId);
} 